2-13 情景十:历史的提交中有敏感数据怎么办?git filter-branch来解决
场景描述
不小心将包含密码、API Key 或密钥的文件提交到了 Git 仓库,即使后续删除了文件,历史记录中仍然可以查看。需要彻底清除。
方案一:git filter-repo(推荐)
git-filter-repo 是 filter-branch 的现代替代品,速度更快、更安全。
# 安装
pip install git-filter-repo
# 从历史中彻底移除某个文件
git filter-repo --path .env --invert-paths
# 从历史中移除某个目录
git filter-repo --path node_modules/ --invert-paths
# 替换所有提交中的敏感字符串
git filter-repo --replace-text <(echo 'OLD_PASSWORD==>REDACTED')
bash
方案二:git filter-branch(传统)
# 从所有历史中移除 .env 文件
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .env' \
--prune-empty --tag-name-filter cat -- --all
bash
清理后的必要步骤
- 强制推送:由于重写了历史,需要强制推送
git push origin --force --all
bash
- 通知所有团队成员:其他人需要重新克隆仓库,不要基于旧历史开发
- 轮换泄露的密钥:如果密码已经暴露,立即更改密码并重新生成密钥
- 添加到 .gitignore:防止再次误提交
参考资源
↑